let mongoose = require('mongoose');
let Schema = mongoose.Schema;

// 1.连接数据库
// 这里连接到了itcast库
mongoose.connect('mongodb://localhost/itcast');

// 2.设计集合结构（表结构）
// 字段名称就是表结构中的属性名称
// 约束的目的是为了保证数据的完整性，不要有脏数据
let userSchema = new Schema({
  username: {
    type: String,
    required: true // 必须有
  },
  password: {
    type: String,
    required: true
  },
  email: {
    type: String
  }
});

// 3.将文档结构发布为模型
//    mongoose.model方法就是将架构发布为model
//    第一个参数：传入一个大写名词单数字符串用来表示你的数据库名称
//              mongoose会自动将大写名词的字符串生成 小写复数 的集合名称
//    第二个参数：就是我们设计好的架构
//   返回值：模型构造函数
let User = mongoose.model('User', userSchema);

// 4.当我们有了模型构造函数之后，就可以使用这个构造函数对User集合中的数据为所欲为了
// 这是新增
// let Aqing = new User({
//   username: 'Aqing',
//   password: '1998',
//   email: 'xuekaiqi@creatshare.com'
// });
//
// Aqing.save(function (err, ret) {
//   if (err) {
//     console.log('存储失败');
//   } else {
//     console.log('成功：' + ret);
//   }
// });


// 这是查询

// 查询所有
User.find(function (err, data) {
  if (err) {
    console.log('查询失败');
  } else {
    console.log(data);
  }
});

// 按条件查,find方法查出来是放在数组中的，如果使用findOne方法，则只会查询到符合条件的第一个，并且是一个单个的对象
// User.find({
//   username: 'Aqing'
// }, function (err, data) {
//   if (err) {
//     console.log('查询不到');
//   } else {
//     console.log(data);
//   }
// });

// 删除,前提是你的库里面得有东西哈～

// User.remove({
//   username: 'Aqing' // 会把username为Aqing的全部删除
// }, function (err, ret) {
//   if (err) {
//     console.log('失败');
//   } else {
//     console.log('成功');
//     console.log(ret);
//   }
// });
// 当然这里给了警告，使用更为详细的方法删除

// 更新数据,当然得有这个数据啊
// User.findByIdAndUpdate('5b87b27ddeb1965bcafec1e0', {
//   password: '123456'
// }, function (err, data) {
//   if (err) {
//     console.log('失败');
//   } else {
//     console.log('成功');
//     console.log(data);
//   }
// });
